package cn.ahaoweb.drule.core.configuration;

import java.util.Map;

/**
 * @Name: RuleServiceConfiguration
 * @Description:
 * @Author: wangzhonghao
 * @Date: 2025/2/12 15:41
 */
public interface Configuration {

    void setProperty(String name, String value);

    String getValue(String name);

    /**
     * 获取所有配置属性
     * @return
     */
    Map<String, String> getProperties();

    /**
     * 合并配置
     * <pre>
     *     如果配置重复了，则以 target 为准
     * </pre>
     * @param target
     * @return 当前配置，即合并后的配置
     */
    Configuration merge(Configuration target);

    /**
     * 根据 Option 设置配置属性
     * @param option
     */
    default void setProperty(Option option){
        setProperty(option.getPropertyName(),option.value());
    }

    /**
     * 根据 Option 获取配置属性
     * @param option
     */
    default String getValue(Option option){
        return getValue(option.getPropertyName());
    }

    /**
     * 判断是否满足该配置选项
     * @param option
     * @return
     */
    default boolean exist(Option option){
        return option.eq(getValue(option.getPropertyName()));
    }

}
